package com.aust.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 元注解是“用于修饰其他注解的注解”。
 */

/**
 * @Retention 指定注解的生命周期（源代码/字节码/运行时）
 * @Target 指定注解可以用于哪些位置（类/方法/字段等）
 */
@Retention(RetentionPolicy.RUNTIME)
/**
 * 值        含义
 * SOURCE	只保留在源码，编译后丢弃
 * CLASS	编译后保留在 .class 文件中，但 JVM 不加载
 * RUNTIME	JVM 加载时保留，可通过反射读取
 */
@Target({ElementType.TYPE})
/**
 * ElementType	    说明
 * TYPE	            类、接口、枚举
 * METHOD	        方法
 * FIELD	        成员变量
 * PARAMETER	    方法参数
 * CONSTRUCTOR	    构造方法
 * LOCAL_VARIABLE	局部变量
 * ANNOTATION_TYPE	注解上使用注解
 * TYPE_USE	        所有类型使用场景（Java 8+）
 */
public @interface Annotation3 {
    String value() default "";
}

/**
 * .class文件反编译文件信息
 * package com.aust.annotation;
 * import java.lang.annotation.Annotation;
 * public interface Annotation3 extends Annotation {
 * public abstract String value();
 * }
 */
